package busterminal.entity;

import busterminal.entity.service.PurposeType;

/**
 * Автобус (реализация)
 */
public class BusImplementation extends AbstractEntityImplementation implements Bus {

    /**
     * Государственный номер
     */
    private String stateNumber;
    /**
     * Модель автобуса
     */
    private BusModel busModel;
    /**
     * Год начала эксплуатации
     */
    private int startYearOfExploitation;
    /**
     * Назначение автобуса, определяемое константой из {@link PurposeType}
     */
    private PurposeType purposeType;

    /**
     * Конструктор по умолчанию
     */
    public BusImplementation() {
    }

    /**
     * Конструктор для сущности автобус
     * @param stateNumber государственный номер
     * @param busModel модель автобуса
     * @param startYearOfExploitation год начала эксплуатации
     * @param purposeType назначение автобуса, определяемое константой из {@link PurposeType}
     */
    public BusImplementation(String stateNumber, BusModel busModel, int startYearOfExploitation, PurposeType purposeType) {
        this.stateNumber = stateNumber;
        this.busModel = busModel;
        this.startYearOfExploitation = startYearOfExploitation;
        this.purposeType = purposeType;
    }

    /**
     * Получить модель автобуса
     * @return модель автобуса
     */
    @Override
    public BusModel getBusModel() {
        return busModel;
    }

    /**
     * Установить модель автобуса
     * @param busModel модель автобуса
     */
    @Override
    public void setBusModel(BusModel busModel) {
        this.busModel = busModel;
    }

    /**
     * Получить назначение автобуса, определяемое константой из {@link PurposeType}
     * @return назначение автобуса, определяемое константой из {@link PurposeType}
     */
    @Override
    public PurposeType getPurposeType() {
        return purposeType;
    }

    /**
     * Установить назначение автобуса, определяемое константой из {@link PurposeType}
     * @param purposeType назначение автобуса, определяемое константой из {@link PurposeType}
     */
    @Override
    public void setPurposeType(PurposeType purposeType) {
        this.purposeType = purposeType;
    }

    /**
     * Получить год начала эксплуатации
     * @return год начала эксплуатации
     */
    @Override
    public int getStartYearOfExploitation() {
        return startYearOfExploitation;
    }

    /**
     * Установить год начала эксплуатации
     * @param startYearOfExploitation год начала эксплуатации
     */
    @Override
    public void setStartYearOfExploitation(int startYearOfExploitation) {
        this.startYearOfExploitation = startYearOfExploitation;
    }

    /**
     * Получить государственный номер
     * @return государственный номер
     */
    @Override
    public String getStateNumber() {
        return stateNumber;
    }

    /**
     * Установить государственный номер
     * @param stateNumber государственный номер
     */
    @Override
    public void setStateNumber(String stateNumber) {
        this.stateNumber = stateNumber;
    }

    /**
     * Метод, возвращающий текстовое представление объекта
     * @return текстовое представление объекта
     */
    @Override
    public String toString() {
        return "Bus{" + "id=" + getId() + ", stateNumber=" + stateNumber + ", busModel=" + busModel + ", startYearOfExploitation=" + startYearOfExploitation + ", purposeType=" + purposeType + '}';
    }
}
